//package com.blueocean_health.care.management.interceptor;
//
//import java.util.Map;
//
//import javax.servlet.http.HttpServletRequest;
//
//import org.apache.commons.fileupload.servlet.ServletFileUpload;
//import org.apache.log4j.Logger;
//import org.aspectj.lang.JoinPoint;
//import org.aspectj.lang.annotation.AfterReturning;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Before;
//import org.aspectj.lang.annotation.Pointcut;
//import org.springframework.stereotype.Component;
//import org.springframework.web.context.request.RequestContextHolder;
//import org.springframework.web.context.request.ServletRequestAttributes;
//import org.springframework.web.servlet.HandlerMapping;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import com.alibaba.fastjson.serializer.SerializerFeature;
//
//@Aspect
//@Component
//public class WebRequestLogAspect {
//
//    private static Logger logger = Logger.getLogger(WebRequestLogAspect.class);
//
//    private ThreadLocal<Long> tlocal = new ThreadLocal<Long>();
//
//   // @Autowired
//   // private OptLogService optLogService;
//
//    @Pointcut("execution(public * com.blueocean_health.care.management.controller..*.*(..))")
//    public void webRequestLog() {}
//
//    // @Order(5)
//    @Before("webRequestLog()")
//    public void doBefore(JoinPoint joinPoint) {
//        try {
//
//            long beginTime = System.currentTimeMillis();
//
//            // 接收到请求，记录请求内容
//            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
//            HttpServletRequest request = attributes.getRequest();
//            String requestedSessionId = request.getRequestedSessionId();
//            String contentType = request.getContentType();
//            if (contentType.contains("multipart/form-data")){
//                return;
//            }
//            String beanName = joinPoint.getSignature().getDeclaringTypeName();
//            String methodName = joinPoint.getSignature().getName();
//            String uri = request.getRequestURI();
//            String remoteAddr = getIpAddr(request);
//            String sessionId = request.getSession().getId();
//            String user = (String) request.getSession().getAttribute("user");
//            String method = request.getMethod();
//            String params = "";
//            if ("POST".equals(method)) {
//                Object[] paramsArray = joinPoint.getArgs();
//                params = argsArrayToString(paramsArray);
//            } else {
//                Map<?, ?> paramsMap = (Map<?, ?>) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
//                params = paramsMap.toString();
//            }
// 
//            logger.info("uri=" + uri + "; beanName=" + beanName + "; remoteAddr=" + remoteAddr + "; user=" + user
//                   + "; methodName=" + methodName + "; params=" + params);
//
////            OperatorLog optLog = new OperatorLog();
////            optLog.setBeanName(beanName);
////            optLog.setCurUser(user);
////            optLog.setMethodName(methodName);
////            optLog.setParams(params != null ? params.toString() : "");
////            optLog.setRemoteAddr(remoteAddr);
////            optLog.setSessionId(sessionId);
////            optLog.setUri(uri);
////            optLog.setRequestTime(beginTime);
//            tlocal.set(beginTime);
//
//        } catch (Exception e) {
//           // logger.error("***操作请求日志记录失败doBefore()***", e);
//        }
//    }
//
//    // @Order(5)
//    @AfterReturning(returning = "result", pointcut = "webRequestLog()")
//    public void doAfterReturning(Object result) {
//        try {
//            // 处理完请求，返回内容
//            Long beginTime = tlocal.get();
//            long requestTime = 0;
//            if(null!=beginTime){
//            	requestTime = (System.currentTimeMillis() - beginTime);
//            }
//            //optLog.setResult(result.toString());
//           // long beginTime = optLog.getRequestTime();
//         //   optLog.setRequestTime(requestTime);
//
//            System.out.println("请求耗时：" + requestTime );
//            logger.info("请求耗时：" + requestTime +"毫秒");
//            System.out.println("RESPONSE : " + result);
//            logger.info("RESPONSE : " + result );
//
//           // optLogService.saveLog(optLog);
//        } catch (Exception e) {
//          //  logger.error("***操作请求日志记录失败doAfterReturning()***", e);
//        }
//    }
//
//
//    /**
//     * 获取登录用户远程主机ip地址
//     * 
//     * @param request
//     * @return
//     */
//    private String getIpAddr(HttpServletRequest request) {
//        String ip = request.getHeader("x-forwarded-for");
//        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
//            ip = request.getHeader("Proxy-Client-IP");
//        }
//        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
//            ip = request.getHeader("WL-Proxy-Client-IP");
//        }
//        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
//            ip = request.getRemoteAddr();
//        }
//        return ip;
//    }
//
//    /**
//     * 请求参数拼装
//     * 
//     * @param paramsArray
//     * @return
//     */
//    private String argsArrayToString(Object[] paramsArray) {
//        String params = "";
//        if (paramsArray != null && paramsArray.length > 0) {
//            for (int i = 0; i < paramsArray.length; i++) {
////                Object jsonObj = JSON.toJSON(paramsArray[i]);
//                String jsonObj = JSONObject.toJSONString(paramsArray[i],SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue,SerializerFeature.WriteNullNumberAsZero,SerializerFeature.WriteNullStringAsEmpty);
//            	if(null==jsonObj){
//                	params += "null";
//                }else
//                params += jsonObj.toString() + " ";
//            }
//        }
//        return params.trim();
//    }
//
//}